import { request } from '@/utils/service'

/**
 * 创建课程
 * 接口描述: 创建新的课程
 * 接口必填项:
 * name-课程名称
 * code-课程代码
 * credits-学分
 * @param {Object} data 课程数据
 * @returns Promise
 */
export function createCourseApi(data) {
  return request({
    url: "courses",
    method: "post",
    data
  })
}

/**
 * 更新课程信息
 * 接口描述: 更新课程基本信息
 * 接口必填项:
 * id-课程ID
 * name-课程名称
 * code-课程代码
 * credits-学分
 * @param {Object} data 课程数据
 * @returns Promise
 */
export function updateCourseApi(data) {
  return request({
    url: `courses/${data.id}`,
    method: "put",
    data
  })
}

/**
 * 删除课程
 * 接口描述: 根据ID删除课程（级联删除相关成绩记录）
 * 接口必填项:
 * id-课程ID
 * @param {number} id 课程ID
 * @returns Promise
 */
export function deleteCourseApi(id) {
  return request({
    url: `courses/${id}`,
    method: "delete"
  })
}

/**
 * 获取课程详情
 * 接口描述: 根据ID获取课程详细信息
 * 接口必填项:
 * id-课程ID
 * @param {number} id 课程ID
 * @returns Promise
 */
export function getCourseDetailApi(id) {
  return request({
    url: `courses/${id}`,
    method: "get"
  })
}

/**
 * 获取所有课程
 * 接口描述: 获取所有课程列表
 * @returns Promise
 */
export function getAllCoursesApi() {
  return request({
    url: "courses/all",
    method: "get"
  })
}

/**
 * 分页查询课程
 * 接口描述: 分页获取课程列表，支持搜索和筛选
 * 接口可选项:
 * page-页码(默认1)
 * page_size-每页大小(默认10)
 * search-搜索关键词(按课程名称或代码模糊查询)
 * credits-学分筛选
 * @param {Object} params 分页参数
 * @returns Promise
 */
export function getCoursePageApi(params) {
  return request({
    url: "courses",
    method: "get",
    params
  })
}

/**
 * 根据课程名称获取课程
 * 接口描述: 根据课程名称获取课程信息
 * 接口必填项:
 * name-课程名称
 * @param {string} name 课程名称
 * @returns Promise
 */
export function getCourseByNameApi(name) {
  return request({
    url: `courses/name/${name}`,
    method: "get"
  })
}

/**
 * 根据课程代码获取课程
 * 接口描述: 根据课程代码获取课程信息
 * 接口必填项:
 * code-课程代码
 * @param {string} code 课程代码
 * @returns Promise
 */
export function getCourseByCodeApi(code) {
  return request({
    url: `courses/code/${code}`,
    method: "get"
  })
}

/**
 * 根据课程名称搜索课程
 * 接口描述: 根据课程名称关键字模糊查询课程
 * 接口必填项:
 * name-课程名称关键字
 * @param {string} name 课程名称关键字
 * @returns Promise
 */
export function searchCoursesByNameApi(name) {
  return request({
    url: "courses/search/name",
    method: "get",
    params: { name }
  })
}

/**
 * 根据课程代码搜索课程
 * 接口描述: 根据课程代码关键字模糊查询课程
 * 接口必填项:
 * code-课程代码关键字
 * @param {string} code 课程代码关键字
 * @returns Promise
 */
export function searchCoursesByCodeApi(code) {
  return request({
    url: "courses/search/code",
    method: "get",
    params: { code }
  })
}

/**
 * 获取课程列表(按名称排序)
 * 接口描述: 获取所有课程列表，按名称排序
 * @returns Promise
 */
export function getCoursesOrderedApi() {
  return request({
    url: "courses/ordered",
    method: "get"
  })
}

/**
 * 检查课程代码是否存在
 * 接口描述: 检查指定的课程代码是否已存在
 * 接口必填项:
 * code-课程代码
 * @param {string} code 课程代码
 * @returns Promise
 */
export function checkCourseCodeExistsApi(code) {
  return request({
    url: `courses/exists/code/${code}`,
    method: "get"
  })
}

/**
 * 检查课程名称是否存在
 * 接口描述: 检查指定的课程名称是否已存在
 * 接口必填项:
 * name-课程名称
 * @param {string} name 课程名称
 * @returns Promise
 */
export function checkCourseNameExistsApi(name) {
  return request({
    url: `courses/exists/name/${name}`,
    method: "get"
  })
}

/**
 * 获取课程选项列表
 * 接口描述: 获取用于下拉选择的课程选项列表
 * @returns Promise
 */
export function getCourseOptionsApi() {
  return request({
    url: "courses/options",
    method: "get"
  })
}
